﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Grafica.ClienteWS;

namespace Grafica
{
    public partial class ABMGasto : Form
    {
        private static ABMGasto InstanciaFormulario = null;

        public ABMGasto()
        {
            InitializeComponent();
            CargarGastos();
        }

        public static ABMGasto Instance()
        {
            if (InstanciaFormulario == null)
            {
                InstanciaFormulario = new ABMGasto();
            }
            return InstanciaFormulario;
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);

            InstanciaFormulario = null;
        }

        private void buttonAdd_Click(object sender, EventArgs e)
        {
            #region validaciones

            if (string.IsNullOrEmpty(textBoxNombre.Text))
                errorProviderGastos.SetError(textBoxNombre, "Debe ingresar el nombre del gasto");
            else
            {
                errorProviderGastos.SetError(textBoxNombre, string.Empty);
               
                DataGasto gasto = new DataGasto();
                gasto.Descripcion = textBoxDescripcion.Text;
                gasto.Nombre = textBoxNombre.Text;

                EtaxiSoapClient ws = new EtaxiSoapClient();

                if (!ws.AltaGasto(gasto))
                {
                    MessageBox.Show("El gasto ya existe", "Error al ingresar gasto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
                else
                {
                    MessageBox.Show("Se ha ingresado el nuevo gasto", "Gasto ingresado correctamente", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    dataGridViewGastos.Rows.Clear();
                    CargarGastos();
                    LimpiarDatos();
                }

            }
            
            #endregion

        }

        private void buttonRemove_Click(object sender, EventArgs e)
        {
            #region Validaciones

            if (string.IsNullOrEmpty(textBoxNombre.Text))
            {
                errorProviderGastos.SetError(textBoxNombre, "Seleccionar en la grilla el gasto que quiere eliminar.");
            }
            else
            {
                errorProviderGastos.SetError(textBoxNombre, string.Empty);
                DataGasto gasto = new DataGasto();
                gasto.Descripcion = textBoxDescripcion.Text;
                gasto.Nombre = textBoxNombre.Text;

                EtaxiSoapClient ws = new EtaxiSoapClient();

                if (!ws.EliminarGasto(gasto))
                {
                    MessageBox.Show("No se ha podido eliminar el gasto", "Error al eliminar gasto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
                else
                {
                    MessageBox.Show("Se ha eliminado el gasto", "Gasto eliminado correctamente", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    dataGridViewGastos.Rows.Clear();
                    CargarGastos();
                    LimpiarDatos();
                    textBoxNombre.Enabled = true;
                }
            }

            #endregion
        }

        private void buttonExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void buttonModify_Click(object sender, EventArgs e)
        {

            #region Validaciones

            if (string.IsNullOrEmpty(textBoxNombre.Text))
            {
                errorProviderGastos.SetError(textBoxNombre, "Seleccionar en la grilla el gasto que quiere modificar.");
            }
            else
            {
                errorProviderGastos.SetError(textBoxNombre, string.Empty);

                DataGasto gasto = new DataGasto();
                gasto.Descripcion = textBoxDescripcion.Text;
                gasto.Nombre = textBoxNombre.Text;

                EtaxiSoapClient ws = new EtaxiSoapClient();

                if (!ws.ModificarGasto(gasto))
                {
                    MessageBox.Show("No se ha podido modificar el gasto", "Error al modificar gasto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
                else
                {
                    MessageBox.Show("Se ha modificado el gasto", "Gasto modificado correctamente", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    dataGridViewGastos.Rows.Clear();
                    CargarGastos();
                    LimpiarDatos();
                    textBoxNombre.Enabled = true;
                }
            }
                

            #endregion
           
        }

        private void CargarGastos()
        {
            EtaxiSoapClient ws = new EtaxiSoapClient();
            DataGasto[] gastos = ws.ListarGastos();

            foreach (DataGasto gasto in gastos)
            {
                this.dataGridViewGastos.Rows.Add(gasto.Nombre, gasto.Descripcion);
            }
        }

        private void LimpiarDatos()
        {
            textBoxNombre.Clear();
            textBoxDescripcion.Clear();
        }

        private void dataGridViewGastos_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            LimpiarDatos();

            int nroFila = this.dataGridViewGastos.CurrentCell.RowIndex;
            textBoxNombre.AppendText(this.dataGridViewGastos.Rows[nroFila].Cells[0].Value.ToString());
            textBoxDescripcion.AppendText(this.dataGridViewGastos.Rows[nroFila].Cells[1].Value.ToString());

            textBoxNombre.Enabled = false;
        }

    }
}
